#ifndef _JPG_H_
#define _JPG_H_

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h> // 定义了全局错误码 errno
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>//头文件缺少sys/
#include <sys/mman.h>
#include <linux/fb.h>
#include <dlfcn.h>  // 动态加载动态库的头文件：dlopen()、dlsym()
#include <sys/wait.h>
#include "jpeglib.h"

struct LCD_info{
    int fd;
    int width;
    int height;
    int components;
    int screen_size;
    char *fb_mem;
};

struct jpeg_info{
    const char *filename;//缺少const，导致赋值时类型不匹配
    int width;
    int height;
    int components;//每个像素的分量数
    int jpg_size;
    int rgb_size;
    unsigned char *jpg_data;
    unsigned char *rgb_data;
};

// BMP格式头规范
struct bitmap_header
{
	int16_t type;
	int32_t size; // 图像文件大小
	int16_t reserved1;
	int16_t reserved2;
	int32_t offbits; // bmp图像数据偏移量
}__attribute__((packed));

struct bitmap_info
{
	int32_t size;   // 本结构大小	
	int32_t width;  // 图像宽
	int32_t height; // 图像高
	int16_t planes;

	int16_t bit_count; // 色深
	int32_t compression;
	int32_t size_img; // bmp数据大小，必须是4的整数倍
	int32_t X_pel;
	int32_t Y_pel;
	int32_t clrused;
	int32_t clrImportant;
}__attribute__((packed));

// 以下结构体不一定存在于BMP文件中，除非：
// bitmap_info.compression为真
struct rgb_quad
{
	int8_t blue;
	int8_t green;
	int8_t red;
	int8_t reserved;
}__attribute__((packed));

void display_img(const char*, uint8_t);

#define CENTER 0x01
#define ZOOM   0x02

#endif